/**
 * 文件相关的 IPC 客户端模块
 */
import { invoke } from '../ipc'

/**
 * 获取应用数据目录
 * @returns 应用数据目录路径
 */
export async function getAppDataPath(): Promise<string> {
  return await invoke('get-app-data-path')
}

/**
 * 读取文件
 * @param filePath 文件路径
 * @param encoding 编码
 * @returns 文件内容
 */
export async function readFile(filePath: string, encoding: BufferEncoding = 'utf8'): Promise<{
  success: boolean
  data?: string
  error?: string
}> {
  return await invoke('read-file', filePath, encoding)
}

/**
 * 写入文件
 * @param filePath 文件路径
 * @param data 文件内容
 * @param encoding 编码
 * @returns 是否成功
 */
export async function writeFile(filePath: string, data: string, encoding: BufferEncoding = 'utf8'): Promise<{
  success: boolean
  error?: string
}> {
  return await invoke('write-file', filePath, data, encoding)
}

/**
 * 检查文件是否存在
 * @param filePath 文件路径
 * @returns 是否存在
 */
export async function fileExists(filePath: string): Promise<{
  exists: boolean
}> {
  return await invoke('file-exists', filePath)
}

/**
 * 获取文件信息
 * @param filePath 文件路径
 * @returns 文件信息
 */
export async function getFileInfo(filePath: string): Promise<{
  success: boolean
  isFile?: boolean
  isDirectory?: boolean
  size?: number
  createdAt?: Date
  modifiedAt?: Date
  accessedAt?: Date
  error?: string
}> {
  return await invoke('get-file-info', filePath)
}

/**
 * 列出目录内容
 * @param dirPath 目录路径
 * @returns 目录内容
 */
export async function listDirectory(dirPath: string): Promise<{
  success: boolean
  files?: Array<{
    name: string
    path: string
    isFile?: boolean
    isDirectory?: boolean
    size?: number
    createdAt?: Date
    modifiedAt?: Date
    error?: string
  }>
  error?: string
}> {
  return await invoke('list-directory', dirPath)
}

/**
 * 删除文件
 * @param filePath 文件路径
 * @returns 是否成功
 */
export async function deleteFile(filePath: string): Promise<{
  success: boolean
  error?: string
}> {
  return await invoke('delete-file', filePath)
}

/**
 * 删除目录
 * @param dirPath 目录路径
 * @returns 是否成功
 */
export async function deleteDirectory(dirPath: string): Promise<{
  success: boolean
  error?: string
}> {
  return await invoke('delete-directory', dirPath)
} 